home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / DELPHI / DYNARRAY.ZIP / DEM16 / UNIT1.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1996-11-01  |  5.0 KB  |  205 lines

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, ExtCtrls, StdCtrls, DynArray;
  8.  
  9. type
  10.   RMyRec = record
  11.     Name   : string[97];
  12.     Age    : smallint;
  13.     end;
  14.  
  15.   TMyArray = array[0..625] of RMyRec;
  16.  
  17.   TForm1 = class(TForm)
  18.     btnCreate: TButton;
  19.     ListBox1: TListBox;
  20.     editName: TEdit;
  21.     Label1: TLabel;
  22.     btnDestroy: TButton;
  23.     Bevel1: TBevel;
  24.     btnAdd: TButton;
  25.     btnDel: TButton;
  26.     btnIns: TButton;
  27.     btnMove: TButton;
  28.     Label2: TLabel;
  29.     btnSave: TButton;
  30.     btnLoad: TButton;
  31.     Label3: TLabel;
  32.     Label4: TLabel;
  33.     labSize: TLabel;
  34.     labCount: TLabel;
  35.     btnSwap: TButton;
  36.     btnSortName: TButton;
  37.     editAge: TEdit;
  38.     Label5: TLabel;
  39.     btnSortAge: TButton;
  40.     procedure btnCreateClick(Sender: TObject);
  41.     procedure btnDestroyClick(Sender: TObject);
  42.     procedure btnAddClick(Sender: TObject);
  43.     procedure btnDelClick(Sender: TObject);
  44.     procedure btnInsClick(Sender: TObject);
  45.     procedure btnMoveClick(Sender: TObject);
  46.     procedure btnSaveClick(Sender: TObject);
  47.     procedure btnLoadClick(Sender: TObject);
  48.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  49.     procedure btnSwapClick(Sender: TObject);
  50.     procedure btnSortNameClick(Sender: TObject);
  51.     procedure btnSortAgeClick(Sender: TObject);
  52.   private
  53.   public
  54.     procedure RefreshList;
  55.   end;
  56.  
  57. var
  58.   Form1: TForm1;
  59.  
  60.   DynArray1 : TDynArray;
  61.   MyArray   : ^TMyArray;
  62.   TmpRec    : RMyRec;
  63.  
  64. implementation
  65.  
  66. {$R *.DFM}
  67.  
  68. {Create array}
  69. procedure TForm1.btnCreateClick(Sender: TObject);
  70. begin
  71.   DynArray1:= TDynArray.Create( sizeof( RMyRec) );
  72.   btnDestroy.enabled   := true;
  73.   btnAdd.enabled       := true;
  74.   btnDel.enabled       := true;
  75.   btnIns.enabled       := true;
  76.   btnMove.enabled      := true;
  77.   btnSave.enabled      := true;
  78.   btnLoad.enabled      := true;
  79.   btnSortName.enabled  := true;
  80.   btnSortAge.enabled   := true;
  81.   btnSwap.enabled      := true;
  82.   labCount.Visible     := true;
  83.   labSize.Visible      := true;
  84.   btnCreate.enabled    := false;
  85.   labcount.caption:= '0';
  86.   labsize.caption:=  '0';
  87. end;
  88.  
  89. {exit}
  90. procedure TForm1.btnDestroyClick(Sender: TObject);
  91. begin
  92.   DynArray1.Free;
  93.   btnDestroy.enabled   := false;
  94.   btnAdd.enabled       := false;
  95.   btnDel.enabled       := false;
  96.   btnIns.enabled       := false;
  97.   btnMove.enabled      := false;
  98.   btnSave.enabled      := false;
  99.   btnLoad.enabled      := false;
  100.   btnSortName.enabled  := false;
  101.   btnSortAge.enabled   := false;
  102.   btnSwap.enabled      := false;
  103.   labCount.Visible     := false;
  104.   labSize.Visible      := false;
  105.   btnCreate.enabled    := true;
  106.   listbox1.items.clear;
  107. end;
  108.  
  109. {close form and make sure array gets freed}
  110. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  111. begin
  112.   if btnDestroy.enabled then DynArray1.Free;
  113. end;
  114.  
  115. {Add array}
  116. procedure TForm1.btnAddClick(Sender: TObject);
  117. begin
  118.   tmprec.Name:= editName.text;
  119.   tmprec.Age:= strtoint(editAge.text);
  120.   MyArray:= DynArray1.Add( @TmpRec );
  121.   RefreshList;
  122. end;
  123.  
  124. {Delete array}
  125. procedure TForm1.btnDelClick(Sender: TObject);
  126. begin
  127.   MyArray:= DynArray1.Delete( ListBox1.ItemIndex );
  128.   RefreshList;
  129. end;
  130.  
  131. {Insert array}
  132. procedure TForm1.btnInsClick(Sender: TObject);
  133. begin
  134.   tmprec.Name:= editName.text;
  135.   tmprec.Age:= strtoint(editAge.text);
  136.   MyArray:= DynArray1.Insert( ListBox1.ItemIndex, @TmpRec );
  137.   RefreshList;
  138. end;
  139.  
  140. {Move array}
  141. procedure TForm1.btnMoveClick(Sender: TObject);
  142. var
  143.   tmpstr : String;
  144.   tmpint : smallint;
  145. begin
  146.   tmpstr:= inputbox('Move Array Item', 'Move to #', '0');
  147.   tmpint:= strtoint(tmpstr);
  148.   MyArray:= DynArray1.Shift( ListBox1.ItemIndex, tmpint );
  149.   RefreshList;
  150. end;
  151.  
  152. {save array}
  153. procedure TForm1.btnSaveClick(Sender: TObject);
  154. begin
  155.   MyArray:= DynArray1.Savetofile( 'DYNARRAY.DAT' );
  156.   RefreshList;
  157. end;
  158.  
  159. {load array}
  160. procedure TForm1.btnLoadClick(Sender: TObject);
  161. begin
  162.   MyArray:= DynArray1.Loadfromfile( 'DYNARRAY.DAT' );
  163.   RefreshList;
  164. end;
  165.  
  166. {refresh listbox}
  167. procedure TForm1.RefreshList;
  168. var i : smallint;
  169. begin
  170.   listbox1.items.clear;
  171.   for i:= 0 to DynArray1.Count - 1 do
  172.     listbox1.items.add( MyArray^[i].Name+' / '+inttostr(MyArray^[i].Age) );
  173.   labcount.caption:= inttostr( DynArray1.Count );
  174.   labsize.caption:= inttostr( DynArray1.Size );
  175. end;
  176.  
  177. {swap items}
  178. procedure TForm1.btnSwapClick(Sender: TObject);
  179. var
  180.   tmpstr : String;
  181.   tmpint : smallint;
  182. begin
  183.   tmpstr:= inputbox('Swap Array Items', 'Swap with #', '0');
  184.   tmpint:= strtoint(tmpstr);
  185.   MyArray:= DynArray1.swap( ListBox1.ItemIndex, tmpint );
  186.   RefreshList;
  187. end;
  188.  
  189. {sort items by a String}
  190. procedure TForm1.btnSortNameClick(Sender: TObject);
  191. begin
  192.   DynArray1.Sort (  0, 'string' );
  193.   RefreshList;
  194. end;
  195.  
  196. {sort items by a smallint}
  197. procedure TForm1.btnSortAgeClick(Sender: TObject);
  198. begin
  199.   showmessage(inttostr(Ofs(tmprec.Age)));
  200.   DynArray1.Sort ( 97, 'smallint' );
  201.   RefreshList;
  202. end;
  203.  
  204. end.
  205.